---
title: دليل الترحيل
---

# دليل الترحيل

## ترحيل RainbowKit

### تغييرات جوهرية في الإصدار 2.x.x

وصلت الاعتمادات النظيرة [wagmi](https://wagmi.sh) و[viem](https://viem.sh) إلى `2.x.x` مع تغييرات مهمة.

اتبع الخطوات أدناه للهجرة.

**1. قم بترقية RainbowKit و`wagmi` و`viem` إلى أحدث الإصدارات**

```bash
npm i @rainbow-me/rainbowkit@2 wagmi@2 viem@2.x
```

**2. قم بتثبيت التبعية النظيرة `@tanstack/react-query`**

مع Wagmi v2، أصبح [TanStack Query](https://tanstack.com/query/v5/docs/react/overview) الآن اعتماداً نظيراً مطلوبًا.

قم بتثبيته باستخدام الأمر التالي:

```bash
npm i @tanstack/react-query
```

**3. قم بترقية إعدادات RainbowKit وWagmi**

```diff
  import '@rainbow-me/rainbowkit/styles.css'

+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
- import { createPublicClient, http } from 'viem'
- import { WagmiConfig } from 'wagmi'
+ import { WagmiProvider, http } from 'wagmi'
- import { configureChains, createConfig } from 'wagmi'
  import { mainnet } from 'wagmi/chains'
  import { RainbowKitProvider } from '@rainbow-me/rainbowkit'
- import { getDefaultWallets, connectorsForWallets } from '@rainbow-me/rainbowkit'
+ import { getDefaultConfig } from '@rainbow-me/rainbowkit'

  /* getDefaultWallets is now optional */
- const { wallets } = getDefaultWallets({
-   appName: 'RainbowKit demo',
-   projectId: 'YOUR_PROJECT_ID',
-   chains,
- })

  /* connectorsForWallets is now optional */
- const connectors = connectorsForWallets([...wallets])

- const { chains, publicClient } = configureChains( 
-   [mainnet, sepolia], 
-   [publicProvider(), publicProvider()],
- )

- const config = createConfig({
-   autoConnect: true,
-   publicClient,
- })

  /* New API that includes Wagmi's createConfig and replaces getDefaultWallets and connectorsForWallets */
+ const config = getDefaultConfig({
+   appName: 'RainbowKit demo',
+   projectId: 'YOUR_PROJECT_ID',
+   chains: [mainnet],
+   transports: {
+     [mainnet.id]: http(),
+   },
+ })

+ const queryClient = new QueryClient()

  const App = () => {
    return (
-     <WagmiConfig config={config}>
+     <WagmiProvider config={config}>
+       <QueryClientProvider client={queryClient}>
-         <RainbowKitProvider chains={chains}>
+         <RainbowKitProvider>
            {/* Your App */}
          </RainbowKitProvider>
+       </QueryClientProvider>
-     </WagmiConfig>
+     </WagmiProvider>
    )
  }
```

**4. تحقق من التغييرات الجذرية في `wagmi` و`viem`**

إذا كنت تستخدم الأساليب والوظائف `wagmi` و`viem` في تطبيقك، فستحتاج إلى اتباع إرشادات الهجرة للإصدار v2:

- [دليل هجرة Wagmi v2](https://wagmi.sh/react/guides/migrate-from-v1-to-v2)
- [التغييرات الجذرية في Viem v2](https://viem.sh/docs/migration-guide#2xx-breaking-changes)

#### تغييرات RainbowKit

**1. تحسين السلوك لمحافظ EIP-6963**

المحافظ التي تدعم معيار الاتصال الجديد EIP-6963 (بما في ذلك Rainbow وMetaMask وغيرها) ستظهر الآن تلقائيًا في قسم `Installed` أثناء تجربة الاتصال بالمحفظة. يضمن ذلك أن المستخدمين يمكن أن يجدوا محافظهم المفضلة دائمًا ويتصلوا بتطبيقات dApps بدون تعارضات أو أزرار احتياطية.

لا يزال لدى المطورين السيطرة الكاملة على قائمة المحافظ المخصصة لتأكيد المحافظ المفضلة للمستخدمين النهائيين. يُفضل أن تستمر في تضمين `injectedWallet` و`walletConnectWallet` في قائمتك لدعم جميع المنصات.

**2. إعداد Wagmi مع getDefaultConfig**

يُبسط هذا API الجديد تجربة الإعداد ويستبدل الحاجة لاستخدام `createConfig` في Wagmi مباشرةً. تم تبسيط إعداد السلسلة، بما في ذلك توفر مقدمي الخدمة العامين لـ `transports`.

سيتم تضمين قائمة المحافظ الافتراضية تلقائيًا، مما يلغي الحاجة لاستخدام `getDefaultWallets` و`connectorsForWallets`.

يمكنك إنشاء قائمة محافظ مخصصة عن طريق تمرير موصلات محافظ مستوردة أو مخصصة إلى `wallets`. لم يعد من الضروري إنشاء موصلات المحافظ وتمرير `projectId` و`chains`.

```
const config = getDefaultConfig({
  appName: 'RainbowKit demo',
  projectId: 'YOUR_PROJECT_ID',
  chains: [mainnet],
  wallets: [rainbowWallet], /* optional custom wallet list */
  /* Wagmi createConfig options including `transports` are also accepted */
})
```

**3. RainbowKitProvider**

لم تعد بحاجة إلى تمرير `chains` إلى `<RainbowKitProvider>`.

```diff
- <RainbowKitProvider chains={chains}>
+ <RainbowKitProvider>
```

**4. السلاسل المخصصة**

تغيّر نوع `Chain` وفقًا لـ Wagmi v2، ويواصل دعم بيانات RainbowKit التعريفية مثل `iconUrl` و`iconBackground`.

```diff
+ import { Chain } from '@rainbow-me/rainbowkit'

  const avalanche = {
    id: 43_114,
    name: 'Avalanche',
    iconUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',
    iconBackground: '#fff',
    nativeCurrency: { name: 'Avalanche', symbol: 'AVAX', decimals: 18 },
    rpcUrls: {
      default: { http: ['https://api.avax.network/ext/bc/C/rpc'] },
    },
    blockExplorers: {
      default: { name: 'SnowTrace', url: 'https://snowtrace.io' },
    },
    contracts: {
      multicall3: {
        address: '0xca11bde05977b3631167028862be2a173976ca11',
        blockCreated: 11_907_934,
      },
    },
  } as const satisfies Chain
```

مثال مع `getDefaultConfig`:

```diff
const config = getDefaultConfig({
+ chains: [
+   avalanche, /* custom chain */
+   {
+     ...mainnet,
+     iconBackground: '#000',
+     iconUrl: 'https://example.com/icons/ethereum.png',
+   }, /* metadata overides */
+ ],
});
```

مثال مع `createConfig`:

```diff
+ import { Chain } from '@rainbow-me/rainbowkit'
+ const chains: readonly [Chain, ...Chain[]] = [
+   {
+     ...mainnet,
+     iconBackground: '#000',
+     iconUrl: 'https://example.com/icons/ethereum.png',
+   },
+ ];
  const config = createConfig({
    chains,
    transports: {
      [mainnet.id]: http(),
    },
  })
```

**5. المحافظ المخصصة**

طرأت تغييرات كبيرة على موصلات محافظ RainbowKit لدعم Wagmi v2. ارجع إلى [الوثائق المحدثة](https://www.rainbowkit.com/docs/custom-wallets) و[مثال الموصل](https://github.com/rainbow-me/rainbowkit/blob/main/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts) لترقية أي موصلات محافظ مخصصة في dApp الخاص بك.

يدعم موصلين المحافظ الآن أيضًا معيار EIP-6963 مع خاصية `rdns`. تأكد من ملئها لمنع الإشارات المكررة إلى المحافظ الداعمة لـ EIP-6963 في قائمة المحافظ الخاصة بك.

### تغييرات جوهرية في الإصدار 1.x.x

#### ترقية إلى wagmi v1

تم تحديث التبعية النظيرة لـ [wagmi](https://wagmi.sh) إلى `1.x.x`.

اتبع الخطوات أدناه للهجرة.

**1. قم بترقية RainbowKit و`wagmi` إلى أحدث إصداراتها**

```bash
npm i @rainbow-me/rainbowkit@^1 wagmi@^1
```

**2. قم بتثبيت التبعية النظيرة `viem`**

يتطلب wagmi v1 التبعية النظيرة لـ `viem`. قم بتثبيته باستخدام الأمر التالي:

```bash
npm i viem
```

**3. ضمان توافق البندلرات والبوليفيل**

ارجع إلى [عينة تكوين Webpack في Next.js](https://github.com/rainbow-me/rainbowkit/blob/main/examples/with-next/next.config.js) لتوجيه التكوين لمشروعك.

إرشادات إطار عمل إضافية لـ Vite وRemix متاحة [هنا](https://www.rainbowkit.com/docs/installation#additional-build-tooling-setup).

**4. تحقق من التغييرات الجذرية في `wagmi`**

إذا كنت تستخدم Windows

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide).

### تغييرات جوهرية في الإصدار 0.12.x

تم تحديث التبعية النظيرة لـ wagmi إلى `0.12.x`.

اعتمدت RainbowKit على موصل `WalletConnectLegacyConnector` في wagmi لدعم WalletConnect v1 المستمر. سيتم إصدار دعم للـ WalletConnect v2 وموصل `WalletConnectConnector` قريبًا كإصدار ترقيعي، دون تغييرات جذرية.

سيتم نقل محافظ تلقائيًا في الإصدارات المستقبلية.

يجب على كل dApp الآن توفير [WalletConnect Cloud](https://cloud.walletconnect.com/) `projectId` لتمكين WalletConnect v2. يجب إنجاز ذلك قبل إيقاف تشغيل خوادم الجسر لـ WalletConnect v1 في 28 يونيو 2023. سيفضل RainbowKit بشكل هادئ v1 لجميع المحافظ إذا لم يتم تحديد `projectId`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية RainbowKit و`wagmi` إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.12.0 wagmi@^0.12.0
```

#### 2. توفير مشروع WalletConnect Cloud projectId

كل dApp يعتمد على WalletConnect يحتاج الآن للحصول على `projectId` من [WalletConnect Cloud](https://cloud.walletconnect.com/). هذا عمل مجاني تمامًا ولا يستغرق سوى بضع دقائق.

قدم `projectId` إلى `getDefaultWallets` وموصلات محافظ RainbowKit الفردية كالتالي:

```ts
const projectId = 'YOUR_PROJECT_ID';

const { wallets } = getDefaultWallets({
  appName: 'My RainbowKit App',
  projectId,
  chains,
});

const connectors = connectorsForWallets([
  ...wallets,
  {
    groupName: 'Other',
    wallets: [
      readyWallet({ projectId, chains }),
      trustWallet({ projectId, chains }),
      ledgerWallet({ projectId, chains }),
    ],
  },
]);
```

### تغييرات جوهرية في الإصدار 0.11.x

تم تحديث التبعية النظيرة لـ wagmi إلى `0.11.x`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية RainbowKit و`wagmi` إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.11.0 wagmi@^0.11.0
```

#### 2. تحقق من التغييرات الجذرية في `wagmi`

إذا كنت تستخدم وظائف (hooks) `wagmi` في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في `wagmi`.

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide#011x-breaking-changes).

### تغييرات جوهرية في الإصدار 0.10.x

تم تحديث التبعية النظيرة لـ wagmi إلى `0.10.x`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية RainbowKit و`wagmi` إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.10.0 wagmi@^0.10.0
```

#### 2. تحقق من التغييرات الجذرية في `wagmi`

إذا كنت تستخدم وظائف (hooks) `wagmi` في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في `wagmi`.

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide#010x-breaking-changes).

### تغييرات جوهرية في الإصدار 0.9.x

تم تحديث التبعية النظيرة لـ wagmi إلى `0.9.x`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية RainbowKit و`wagmi` إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.9.0 wagmi@^0.9.0
```

#### 2. تحقق من التغييرات الجذرية في `wagmi`

إذا كنت تستخدم وظائف (hooks) `wagmi` في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في `wagmi`.

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide#09x-breaking-changes).

### تغييرات جوهرية في الإصدار 0.8.x

تم تحديث التبعية النظيرة لـ wagmi إلى `0.8.x`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية RainbowKit و`wagmi` إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.8.0 wagmi@^0.8.0
```

#### 2. تحقق من التغييرات الجذرية في `wagmi`

إذا كنت تستخدم وظائف (hooks) `wagmi` في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في `wagmi`.

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide#08x-breaking-changes).

### تغييرات جوهرية في الإصدار 0.7.x

إذا كنت تقوم بإنشاء قائمة محافظ مخصصة، يجب الآن استيراد كل محفظة بشكل فردي لتقليل حجم الحزمة. لاحظ أنه بما أن المحافظ لم تعد مسماة عبر كائن `wallet`، فكل المحافظ الآن لديها لاحقة `Wallet`.

```diff
-import { connectorsForWallets, wallet } from '@rainbow-me/rainbowkit';
+import { connectorsForWallets } from '@rainbow-me/rainbowkit';
+import {
+  injectedWallet,
+  rainbowWallet,
+  metaMaskWallet,
+  coinbaseWallet,
+  walletConnectWallet,
+} from '@rainbow-me/rainbowkit/wallets';

const wallets = [
-  wallet.injected({ chains }),
-  wallet.rainbow({ chains }),
-  wallet.metaMask({ chains }),
-  wallet.coinbase({ chains, appName: 'My App' }),
-  wallet.walletConnect({ chains }),
+  injectedWallet({ chains }),
+  rainbowWallet({ chains }),
+  metaMaskWallet({ chains }),
+  coinbaseWallet({ chains, appName: 'My App' }),
+  walletConnectWallet({ chains }),
];
```

أيضًا لاحظ أن الطبقة التوافقية العكسية لمحفظة Steakwallet قد تم إزالتها. يجب استخدام Omni بدلاً منها.

```diff
-import { wallet } from '@rainbow-me/rainbowkit';
+import { omniWallet } from '@rainbow-me/rainbowkit/wallets';

const wallets = [
-  wallet.steak({ chains }),
+  omniWallet({ chains }),
];
```

### تغييرات جوهرية في الإصدار 0.4.x

تم تحديث التبعية النظيرة لـ RainbowKit إلى `0.5.x`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية التبعية

قم بترقية RainbowKit وwagmi إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.4.0 wagmi@^0.5.0
```

#### 2. تحقق من التغييرات الجذرية في `wagmi`

إذا كنت تستخدم وظائف (hooks) `wagmi` في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في `wagmi`.

[يمكنك رؤية دليل الترحيل الخاص بهم هنا](https://wagmi.sh/react/migration-guide#05x-breaking-changes).

### تغييرات جوهرية في الإصدار 0.3.x

تم إزالة معامل `chainId` من `createConnector` في نوع `Wallet`.

**لاحظ أن جميع المحافظ المدمجة تستخدم API الجديد. لن يتأثر معظم المستهلكين. يؤثر هذا التغيير فقط على المستهلكين الذين قاموا بإنشاء/استهلاك [محافظ مخصصة](/docs/custom-wallets).**

إذا كنت تستمد روابط RPC سابقًا من `chainId` على `createConnector`، يمكنك الآن إزالة هذه الطريقة حيث يتعامل `wagmi` الآن مع روابط RPC داخلياً عند استخدامها مع `configureChains`.

```diff
import { connectorsForWallets, wallet, Chain, Wallet } from '@rainbow-me/rainbowkit';
import { chain, configureChains } from 'wagmi';
import { alchemyProvider } from 'wagmi/providers/alchemy';
import { publicProvider } from 'wagmi/providers/public';
import { WalletConnectConnector } from 'wagmi/connectors/walletConnect';

export interface MyWalletOptions {
  chains: Chain[];
}

-const chains = [chain.mainnet]
+const { chains } = configureChains(
+  [chain.mainnet],
+  [
+    alchemyProvider({ alchemyId: process.env.ALCHEMY_ID }),
+    publicProvider(),
+  ]
+);

export const rainbow = ({ chains }: MyWalletOptions): Wallet => ({
  ...
- createConnector: ({ chainId }) => {
+ createConnector: () => {
-   const rpc = chains.reduce(
-     (rpcUrlMap, chain) => ({
-       ...rpcUrlMap,
-       [chainId]: chain.rpcUrls.default,
-     }),
-     {}
-   );
    const connector = new WalletConnectConnector({
      chains,
      options: {
        qrcode: false,
-       rpc,
      },
    });
  }
  ...
}

const connectors = connectorsForWallets([
  {
    groupName: 'Recommended',
    wallets: [
      rainbow({ chains }),
    ],
  },
]);
```

### تغييرات جوهرية في الإصدار 0.2.x

تم تحديث التبعية النظيرة لـ RainbowKit إلى `^0.4`.

اتبع الخطوات أدناه للهجرة.

#### 1. قم بترقية التبعية

قم بترقية RainbowKit وwagmi إلى أحدث نسخة

```bash
npm i @rainbow-me/rainbowkit@^0.2.0 wagmi@^0.4.2
```

#### 2. استبدال استيراد configureChains

استورد `configureChains` من wagmi بدلاً من RainbowKit:

```diff
- import { configureChains } from '@rainbow-me/rainbowkit';
+ import { configureChains } from 'wagmi';
```

#### 3. ترحيل المزودين

لم يعد RainbowKit يصدر API لـ `apiProvider`. استبدله بالمزود المرغوب فيه من wagmi.

```diff
- import { apiProvider } from '@rainbow-me/rainbowkit';
```

#### Alchemy

استورد `alchemyProvider` من `wagmi/providers/alchemy`.

```diff
+ import { alchemyProvider } from 'wagmi/providers/alchemy';

const { chains, provider } = configureChains(
  [chain.mainnet, chain.polygon, chain.optimism, chain.arbitrum],
- [apiProvider.alchemy(process.env.ALCHEMY_ID)]
+ [alchemyProvider({ alchemyId: process.env.ALCHEMY_ID })]
);
```

#### Infura

استورد `infuraProvider` من `wagmi/providers/infura`.

```diff
+import { infuraProvider } from 'wagmi/providers/infura';

const { chains, provider } = configureChains(
  [chain.mainnet, chain.polygon, chain.optimism, chain.arbitrum],
- [apiProvider.infura(process.env.INFURA_ID)]
+ [infuraProvider({ infuraId: process.env.INFURA_ID })]
);
```

#### JSON RPC

استورد `jsonRpcProvider` من `wagmi/providers/jsonRpc`.

```diff
+ import { jsonRpcProvider } from 'wagmi/providers/jsonRpc';

const { chains, provider } = configureChains(
  [chain.mainnet, chain.polygon],
  [
-   apiProvider.jsonRpc(chain => ({
-     rpcUrl: `https://${chain.id}.example.com`,
-   })),
+   jsonRpcProvider({
+     rpc: chain => ({
+       http: `https://${chain.id}.example.com`,
+     }),
+   }),
  ]
);
```

#### مزود عام

استورد `publicProvider` من `wagmi/providers/public`.

```diff
+ import { publicProvider } from 'wagmi/providers/public';

const { chains, provider } = configureChains(
  [chain.mainnet, chain.polygon],
- [apiProvider.fallback()]
+ [publicProvider()]
);
```

#### 4. أعد تسمية المزود في wagmi

أعد تسمية `WagmiProvider` إلى `WagmiConfig`.

```diff
import {
- WagmiProvider
+ WagmiConfig
} from 'wagmi'

const App = () => {
  return (
-   <WagmiProvider client={wagmiClient}>...</WagmiProvider>
+   <WagmiConfig client={wagmiClient}>...</WagmiConfig>
  );
};
```

وانتهيت! 🌈
